home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AmigActive 10
/
AACD 10.iso
/
AACD
/
Magazine
/
Morphos
/
GCC
/
os-includeppc
/
powerup
/
ppclib
/
object.h
< prev
Wrap
C/C++ Source or Header
|
1998-05-24
|
7KB
|
255 lines
#ifndef POWERUP_PPCLIB_OBJECT_H
#define POWERUP_PPCLIB_OBJECT_H
/**************************************************
*
*
* PPCLoadElfObjectTags()
*
*
**************************************************/
#define PPCELFLOADOBJECTTAG_DUMMY (TAG_USER + 0x23300)
/* pointer to a filename of the elf file */
#define PPCELFLOADTAG_ELFNAME (PPCELFLOADOBJECTTAG_DUMMY + 0x0)
/* pointer to the elf stream resident in memory.
* PPCELFLOADTAG_ELFNAME and PPCELFLOADTAG_ELFADDRESS
* are mutually exclusive
*/
#define PPCELFLOADTAG_ELFADDRESS (PPCELFLOADOBJECTTAG_DUMMY + 0x1)
/* length of the elf stream. This tag is optional
*/
#define PPCELFLOADTAG_ELFLENGTH (PPCELFLOADOBJECTTAG_DUMMY + 0x2)
/* Stream IO Hook
* so you can implement your own loader system
* BOOL CallHookPkt(hook,Handle,&Msg);
*
*/
#define PPCELFLOADTAG_HOOK (PPCELFLOADOBJECTTAG_DUMMY + 0x3)
/* Load an ElfObject as a SharedLib Module
* BOOL
*/
#define PPCELFLOADTAG_LIBRARY (PPCELFLOADOBJECTTAG_DUMMY + 0x4)
/* File Ptr
* BPTR
*/
#define PPCELFLOADTAG_FILE (PPCELFLOADOBJECTTAG_DUMMY + 0x5)
/* pointer to THE name of the elf lib */
#define PPCELFLOADTAG_ELFLIBNAME (PPCELFLOADOBJECTTAG_DUMMY + 0x6)
/* Ask for at least version x of a SharedLib Module
* ULONG
*/
#define PPCELFLOADTAG_LIBVERSION (PPCELFLOADOBJECTTAG_DUMMY + 0x7)
/* Ask for at least revision x of a SharedLib Module
* ULONG
*/
#define PPCELFLOADTAG_LIBREVISION (PPCELFLOADOBJECTTAG_DUMMY + 0x8)
/* Ask for the specific version of a SharedLib Module
* BOOL
*/
#define PPCELFLOADTAG_LIBEXACTVERSION (PPCELFLOADOBJECTTAG_DUMMY + 0x9)
#define PPCELFLOADTAG_LIBEXACTREVISION (PPCELFLOADOBJECTTAG_DUMMY + 0xa)
struct ElfStreamMsg
{
ULONG Type;
ULONG Arg1; /* Open->No Meaning,Close->No Meaning,Read->Address,Seek->Offset */
ULONG Arg2; /* Open->No Meaning,Close->No Meaning,Read->Length,Seek->Type */
};
/* The Result must be a Handle */
#define PPCELFLOADTYPE_OPEN 0
/* The Result must be a boolean */
#define PPCELFLOADTYPE_CLOSE 1
/* The Result must be the read length or -1 */
#define PPCELFLOADTYPE_READ 2
/* The Result must be the old offset or -1 */
#define PPCELFLOADTYPE_SEEK 3
/**************************************************
*
*
* PPCGetElfInfos() Tags
*
*
**************************************************/
#define PPCELFINFOTAG_DUMMY (TAG_USER + 0x23000)
/* Returns the name of an elfobject */
#define PPCELFINFOTAG_NAME (PPCELFINFOTAG_DUMMY + 0x0)
/* Returns infos about a reloc instead of a symbol
* A special PPCSymbolStruct is passed by ti_Data
* which tells if you search for a symbol name
* or wanna find a symbol for a certain address.
* Result=TRUE if the search was successful and then
* the SymbolStruct contains other important infos
*/
#define PPCELFINFOTAG_RELOC (PPCELFINFOTAG_DUMMY + 0x1)
/* Set this Boolean if you want the infos global.
Then all Elfobjects are searched.
*/
#define PPCELFINFOTAG_GLOBAL (PPCELFINFOTAG_DUMMY + 0x2)
/* Define this Hook if you wanna get informations about every
Symbol in a specific ElfObject or in all.
(ElfObject==NULL || PPCELFINFOTAG_GLOBAL=TRUE)
That`s the way how the PPCGetObjectInfo() calls your hook.
MyInfo contains the passed infos, so you could show all
important symbols or relocs if possible.
CallHookPkt(ScanSymbolHook,
(APTR) ElfSubStructure, // Not really useful
(APTR) MyInfo);
*/
#define PPCELFINFOTAG_SCANSYMBOLHOOK (PPCELFINFOTAG_DUMMY + 0x3)
struct PPCObjectInfo
{
ULONG Address;
/* Name of the Object
* If this is set PPCGetElfInfo search for the Name
* Otherwise Address is used to search for an object
*/
char *Name;
/* Type of the object
*/
ULONG Type;
/* Subtype of the object
* Symbol:
* COMMON=BSS
* FUNCTION
* ...
* Section:
*
* Reloc:
* Relocation Type
*/
ULONG SubType;
/* Symbol:
* Local,Global,Weak
* Section:
*
*/
ULONG Binding;
/* Size of the object
*/
ULONG Size;
};
#define PPCELFINFOTYPE_SECTION 0
/* A Symbol whose SubType defines the real
symbol Type and Binding contains the
state of the symbol.
*/
#define PPCELFINFOTYPE_SYMBOL 1
/* A common section(BSS) symbol whose SubType
defines the real symbol Type and Binding
contains the state of the symbol.
*/
#define PPCELFINFOTYPE_COMSYMBOL 2
/* A reloc entry is quite simular to a symbol.
It`s only useful to connect certain instruction
addresses with certain symbols where you can`t
calculate the symbol value in an easy way.
i.e 16 bit PPC addressmodes..ADDR16_HI,HA
*/
#define PPCELFINFOTYPE_RELOC 3
/*------------------------------------------------------------------------*/
/* definition of the symbol types` */
/*------------------------------------------------------------------------*/
#define STT_NOTYPE 0
#define STT_OBJECT 1
#define STT_FUNC 2
#define STT_SECTION 3
#define STT_FILE 4
#define STT_LOPROC 13
#define STT_HIPROC 15
/*------------------------------------------------------------------------*/
/* definition of the symbol bindings */
/*------------------------------------------------------------------------*/
#define STB_LOCAL 0
#define STB_GLOBAL 1
#define STB_WEAK 2
#define STB_LOPROC 13
#define STB_HIPROC 15
/*------------------------------------------------------------------------*/
/* definition of the supported elf.rela types */
/*------------------------------------------------------------------------*/
#define R_PPC_NONE 0
#define R_PPC_ADDR32 1
#define R_PPC_ADDR24 2
#define R_PPC_ADDR16 3
#define R_PPC_ADDR16_L 4
#define R_PPC_ADDR16_HI 5
#define R_PPC_ADDR16_HA 6
#define R_PPC_ADDR14 7
#define R_PPC_ADDR14_BRTAKEN 8
#define R_PPC_ADDR14_BRNTAKEN 9
#define R_PPC_REL24 10
#define R_PPC_REL14 11
#define R_PPC_REL14_BRTAKEN 12
#define R_PPC_REL14_BRNTAKEN 13
#define R_PPC_GOT16 14
#define R_PPC_GOT16_LO 15
#define R_PPC_GOT16_HI 16
#define R_PPC_GOT16_HA 17
#define R_PPC_PLTREL24 18
#define R_PPC_COPY 19
#define R_PPC_GLOB_DAT 20
#define R_PPC_JMP_SLOT 21
#define R_PPC_RELATIVE 22
#define R_PPC_LOCAL24PC 23
#define R_PPC_UADDR32 24
#define R_PPC_UADDR16 25
#define R_PPC_REL32 26
#define R_PPC_PLT32 27
#define R_PPC_PLTREL32 28
#define R_PPC_PLT16_LO 29
#define R_PPC_PLT16_HI 30
#define R_PPC_PLT16_HA 31
#define R_PPC_SDAREL16 32
#define R_PPC_SECTOFF 33
#define R_PPC_SECTOFF_LO 34
#define R_PPC_SECTOFF_HI 35
#define R_PPC_SECTOFF_HA 34
#endif